package ar.edu.utn.frba.dds.opendesigners.resultados;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import ar.edu.utn.frba.dds.opendesigners.fecha.Fecha;
import ar.edu.utn.frba.dds.opendesigners.resultados.VueloDirecto;

public class VueloConEscalas implements Asiento {

	List<VueloDirecto> listaTramos = new ArrayList<VueloDirecto>();
	BigDecimal precio = new BigDecimal(0);

	public void agregarTramo(VueloDirecto elTramo){
		this.listaTramos.add(elTramo);
	}
	
	@Override
	public String getNumeroVuelo(){
		// TODO Buscar alguna forma mejor. Por ahora, el Nro de vuelo lo determina el 1er tramo
		return this.listaTramos.get(0).getNumeroVuelo();
	}
	
	@Override
	public String getNumeroAsiento() {
		// TODO Buscar alguna forma mejor. Por ahora, el DNI lo determina el 1er tramo
		return this.listaTramos.get(0).getNumeroAsiento();
	}

	@Override
	public String getOrigen() {
		return this.listaTramos.get(0).getOrigen();
	}

	@Override
	public String getDestino() {
		return this.listaTramos.get(this.listaTramos.size() - 1).getDestino();
	}

	@Override
	public Fecha getFechaSalida() {
		return this.listaTramos.get(0).getFechaSalida();
	}
	
	@Override
	public String getFechaSalida(String formato){
		return this.listaTramos.get(0).getFechaSalida(formato);
	}

	@Override
	public Fecha getFechaLlegada() {
		return this.listaTramos.get(this.listaTramos.size() - 1).getFechaLlegada();
	}
	
	@Override
	public String getFechaLlegada(String formato){
		return this.listaTramos.get(this.listaTramos.size() - 1).getFechaLlegada(formato);
	}
	
	@Override
	public char getEstado() {
		// TODO Buscar alguna forma mejor. Por ahora, el estado lo determina el 1er tramo
		return this.listaTramos.get(0).getEstado();
	}

	@Override
	public char getTipo() {
		// TODO Buscar alguna forma mejor. Por ahora, el tipo lo determina el 1er tramo
		return this.listaTramos.get(0).getTipo();
	}

	@Override
	public boolean precioMenorQue(BigDecimal precio) {
		return (this.getPrecio().compareTo(precio) < 0);
	}

	@Override
	public boolean precioMayorQue(BigDecimal precio) {
		return (this.getPrecio().compareTo(precio) >= 0);
	}

	@Override
	public BigDecimal getPrecio() {
		BigDecimal total = new BigDecimal(0);
		
		for (VueloDirecto item : this.listaTramos){
			total = total.add(item.getPrecio());
		}
		
		return total;
	}

	@Override
	public void reservar() {
		for (VueloDirecto item : this.listaTramos){
			item.reservar();
		}
	}

	@Override
	public void comprar() {
		for (VueloDirecto item : this.listaTramos){
			item.comprar();
		}
	}

	@Override
	public Integer getPopularidad() {
		Integer popularidad = 0;
		for (VueloDirecto item : this.listaTramos){
			popularidad = popularidad + item.getPopularidad();
		}
		
		return popularidad;
	}

	@Override
	public Integer getTiempoViaje() {
		Integer tiempo = 0;
		for (VueloDirecto item : this.listaTramos){
			tiempo = tiempo + item.getTiempoViaje();
		}
		
		return tiempo;
	}

	@Override
	public String getDni() {
		// TODO Buscar alguna forma mejor. Por ahora, el DNI lo determina el 1er tramo
		return this.listaTramos.get(0).getDni();
	}

	@Override
	public void setDni(String dni) {
		for (VueloDirecto item : this.listaTramos){
			item.setDni(dni);
		}
	}

//	@Override
//	public BigDecimal sumarPrecio(BigDecimal monto) {
//		BigDecimal total = new BigDecimal(0);
//		
//		for (VueloDirecto item : this.listaTramos){
//			total = total.add(item.getPrecio());
//		}
//		return total;
//	}
	
	@Override
	public void sumarPrecio(BigDecimal monto) {
		this.precio = this.getPrecio().add(monto);
	}

	public void InvertirItinerario(){
		Collections.reverse(this.listaTramos);
	}

	@Override
	public Integer getCantidadEscalas() {
		return this.listaTramos.size();
	}
	
}
